NS_ASSUME_NONNULL_BEGIN

@interface JMCommonUtils : NSObject

/**
 *
 */
+ (void)resetRootViewFrameWillAppear;

/**
 *
 */
+ (void)resetRootViewFrameWillDisappear;

/**
 * 判断手机是否联网状态
 */
+ (BOOL)isNetworkReachable;

/**
 *
 */
+ (void)ShowToastByContent:(NSString *)content afterDelay:(NSInteger)delay actionEnabled:(bool)isEnabled withBlock:(void (^_Nullable)(void))completionBlock;

/**
 *
 */
+ (void)showHudWithText:(NSString *)textString;

/**
 *
 */
+ (void)showAutomicHiddenHudText:(NSString *)textString;

/**
 *
 */
+ (void)showHudWithText:(NSString *)textString duration:(NSTimeInterval)duration;

/**
 *
 */
+ (void)dismiss;

/**
 * 弹出一个包含标题、消息和单个按钮的警告对话框。
 *
 * @param str_Title 对话框的标题。
 * @param str_Message 对话框显示的消息内容。
 * @param str_ButtonTitle 对话框按钮的标题。
 *
 * 此方法确保UIAlertController在主线程上创建和展示，以避免UI更新相关的问题。
 * 它首先获取应用程序的根视图控制器，然后递归地检查是否有正在展示的视图控制器，
 * 如果有，将其设置为UIAlertController的展示者。这确保了UIAlertController能够
 * 在任何当前用户界面状态下被正确展示。
 */
+ (void)AlertWithTitle:(NSString *)str_Title WithMessage:(NSString *)str_Message WithButtonTitle:(NSString *)str_ButtonTitle;

@end

//========================================

@interface NSString (JSONCategories)
- (id)objectFromJSONString;
@end

//========================================

@interface NSObject (JSONCategories)
- (NSString *)JSONString;
- (NSData *)JSONData;
- (id)objectFromJSONData;
@end

//========================================

@interface UIAlertController (pruneNegative)
- (void)pruneNegativeWidthConstraints;
@end

NS_ASSUME_NONNULL_END
